package com.ccx.demo.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * <pre>
 *
 * @author 谢长春 2018-10-4
 * @deprecated 废弃方法，不再使用 aop 设置默认值
 */
@Component
@Aspect
@Slf4j
@Deprecated
public class ServiceAspect {
//    /**
//     * <pre>
//     * 如果 service 在子线程中，将获取不到用户信息，因为 Spring Security 用户信息放在 ThreadLocal 中
//     * 如果在子线程中调用 service 中的方法，且该方法必须要有用户名，需要子线程外先设置好用户姓名，假如用户信息有放在缓存中，也可以通过用户ID获取缓存用户的信息
//     *
//     * 也可以通过设置上下文的方式将会话信息设置到子线程中
//     * final SecurityContext mainSecurityContext =  SecurityContextHolder.getContext();
//     * new Thread(() -> {
//     *     try {
//     *         SecurityContextHolder.setContext(mainSecurityContext); // 设置子线程 ThreadLocal
//     *         // 子线程代码
//     *     } finally {
//     *         SecurityContextHolder.clearContext(); // 清除子线程 ThreadLocal
//     *     }
//     * }).start();
//     * </pre>
//     */
//    @Override
//    public String getNickname() {
//        return Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication())
//                .map(Authentication::getPrincipal)
//                .map(o -> o instanceof TabUser ? ((TabUser) o).getNickname() : null)
//                .orElse(null)
//                ;
//    }
//
//    @Before("execution(* com.ccx.demo..*.service..*.save(..))")
//    public void beforeSave(final JoinPoint joinPoint) {
//        save(joinPoint);
//    }
//
//    @Before("execution(* com.ccx.demo..*.service..*.saveAll(..))")
//    public void beforeSaveAll(final JoinPoint joinPoint) {
//        saveAll(joinPoint);
//    }
//
//    @Before("execution(* com.ccx.demo..*.service..*.update(..))")
//    public void beforeUpdate(final JoinPoint joinPoint) {
//        update(joinPoint);
//    }
//
//    @AfterReturning(pointcut = "execution(* com.ccx.demo..*.service..*.delete*(..))", returning = "result")
//    public void afterDelete(final JoinPoint joinPoint, final Object result) {
//        delete(joinPoint, result);
//    }
}
